import logging
from logging.handlers import TimedRotatingFileHandler
import os
from datetime import datetime

class logging_use:
    @classmethod
    def setup_logger(cls,log_file=None, log_level=logging.DEBUG, when='midnight', interval=1, backup_count=7):
        """
        设置并返回一个日志记录器，支持按时间轮转日志文件。
        :param log_file: 日志文件路径。如果为None，则日志仅输出到控制台。
        :param log_level: 日志级别，默认为DEBUG。
        :param when: 时间轮转的单位，可选值：'S'（秒）、'M'（分钟）、'H'（小时）、'D'（天）、'W'（周）、'midnight'（午夜）。
        :param interval: 时间间隔，与 `when` 配合使用。
        :param backup_count: 保留的备份文件数量。
        :return: 配置好的日志记录器。
        """
        # 创建一个日志记录器
        logger = logging.getLogger('TestLogger')
        logger.setLevel(log_level)

        # 创建一个格式化器
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

        # 创建一个控制台处理器并设置格式化器
        console_handler = logging.StreamHandler()
        console_handler.setFormatter(formatter)
        logger.addHandler(console_handler)

        # 如果提供了日志文件路径，则创建一个时间轮转的文件处理器
        if log_file:
            # 确保日志目录存在
            os.makedirs(os.path.dirname(log_file), exist_ok=True)

            # 创建 TimedRotatingFileHandler
            file_handler = TimedRotatingFileHandler(
                filename=log_file,
                when=when,
                interval=interval,
                backupCount=backup_count,
                encoding='utf-8'
            )
            file_handler.setFormatter(formatter)
            logger.addHandler(file_handler)

        return logger


